#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QApplication>
#include <iostream>

class Car : public QWidget {
    Q_OBJECT

public:
    Car(QWidget *parent = nullptr) : QWidget(parent), x(200), y(300), angle(0) {
        // 定时器，每100ms更新小车的位置
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &Car::updateCarPosition);
        timer->start(100);
    }

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);

        // 设置小车的颜色
        painter.setBrush(Qt::blue);

        // 创建小车的矩形，并应用旋转
        QTransform transform;
        transform.translate(x, y);       // 将小车平移到 (x, y)
        transform.rotate(angle);          // 旋转小车
        painter.setTransform(transform);

        // 绘制一个简单的矩形来代表小车
        painter.drawRect(-25, -12, 50, 24);  // 假设小车是一个 50x24 的矩形

        // 绘制车头的红点
        painter.setBrush(Qt::red);  // 设置红色
        painter.drawEllipse(25, 0, 5, 5);  // 绘制一个半径为5的红点在车头

        QWidget::paintEvent(event);
    }

public slots:
    void updateCarPosition() {
        // 更新小车的位置，示例中每次更新时向右移动10像素并旋转
        angle += 5;  // 每次增加5度的旋转

        std::cout << "angle = " << angle << std::endl;

        if (angle >= 360) {
            angle = 0;  // 防止角度过大，保持在0到360度之间
        }

        // 重绘窗口
        update();
    }

private:
    int x, y;      // 小车的位置
    int angle;     // 小车的旋转角度
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    Car carWindow;
    carWindow.setFixedSize(400, 300);
    carWindow.show();

    return app.exec();
}
#include "draw_car.moc"